package java学习.第15章_File类与IO流;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * ClassName: A2_File的目录基本信息
 * Package: java学习.第15章_File类与IO流
 * Description:
 *
 * @Author 张蛟龙
 * @Create 2023/4/8 17:50
 * @Version 1.0
 */
public class A2_File的目录基本信息 {

    /**
     * public String getAbsolutePath()：获取绝对路径
     * public File getAbsoluteFile()：获取绝对路径表示的文件
     * public String getPath() ：获取路径
     * public String getName() ：获取名称
     * public String getParent()：获取上层文件目录路径。若无，返回null
     * public long length() ：获取文件长度（即：字节数）。不能获取目录的长度。
     * public long lastModified() ：获取最后一次的修改时间，毫秒值
     *
     */
    @Test
    public void File的常用方法(){
        String f = "file/hello.txt";

        //  其实应该是一个'\'  只是在注释中  不能有一个'\'  容易出现 非法的Unicode 转义问题 的错误
        File file1 = new File("file/hello.txt");
        System.out.println("获取绝对路径:"+file1.getAbsolutePath());// 获取绝对路径
        System.out.println("获取绝对路径表示的文件:"+file1.getAbsoluteFile());// 获取绝对路径  一般上传下载使用这个更稳
        System.out.println("获取路径:"+file1.getPath());//hello.txt 获取路径 返回
        System.out.println("获取名称:"+file1.getName());//hello.txt 获取名称
        System.out.println("获取上层文件目录路径:"+file1.getParent());//null
        //获取上层文件目录路径。若无，返回null 若用的是相对路径 极有可能返回null

        System.out.println("获取文件长度:"+file1.length());//获取文件长度（即：字节数）

        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//格式化时间指定格式
        Date date = new Date(file1.lastModified());////获取最后一次的修改时间，毫秒值
        String format = sdf.format(date);//格式化
        System.out.println("最后一次的修改时间:"+format);//获取最后一次的修改时间，毫秒值

        System.out.println("************绝对路径********************************");
        File file2 =  new File("E:\\xunlian\\untitled\\hello.txt");
        System.out.println("获取绝对路径:"+file2.getAbsolutePath());//E:\\xunlian\\untitled\\hello.txt
        System.out.println("获取路径:"+file2.getPath());//E:\\xunlian\\untitled\\hello.txt
        System.out.println("获取名称:"+file2.getName());//hello.txt
        System.out.println("获取上层文件目录路径:"+file2.getParent());//E:\\xunlian\\untitled
    }

    /**
     * 如下的两个方法适用于文件目录：
     * public String[] list() ：获取指定目录下的所有文件或者文件目录的名称数组
     * public File[] listFiles() ：获取指定目录下的所有文件或者文件目录的File数组
     *
     */
    @Test
    public void 获得目录信息(){

        System.out.println("----------list()---------------------------------");
        File file = new File("C:\\");

        String[] list = file.list();//返回file目录下的所有文件名字
        for(String s : list){
            System.out.println(s);
        }
        System.out.println("----------list( FilenameFilter/FileFilter )---------------------------------");

        String[] list1 = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //name 就是此目录下的所用 文件/文件目录 名字
                return name.equals("Windows");
            }
        });
        for (String s : list1){
            System.out.println(s);
        }
        System.out.println("----------listFiles()---------------------------------");

        File[] files = file.listFiles();////返回file目录下的所有文件路径
        for(File f : files){
            System.out.println(f);
        }
        System.out.println("----------listFiles()---------------------------------");

        File[] files2 = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return false;
            }
        });////返回file目录下的所有文件路径
        for(File f : files2){
            System.out.println(f);
        }


    }

}
